package 栈;

/**
 * @author: 大怪
 * @email: 962527441@qq.com
 */

import java.util.HashSet;
import java.util.Set;
import java.util.Stack;

/**
 * 题目：
 * 根据 逆波兰表示法，求该后缀表达式的计算结果。
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 * 示例 1：
 *
 * 输入：tokens = ["2","1","+","3","*"]
 * 输出：9
 * 解释：该算式转化为常见的中缀算术表达式为：((2 + 1) * 3) = 9
 *
 */
public class 后缀表达式 {
    class Solution {
        public int evalRPN(String[] tokens) {
            Set<String> set = new HashSet<String>();
            Stack<Integer> stack = new Stack<Integer>();
            set.add("*");
            set.add("/");
            set.add("+");
            set.add("-");
            for (String s : tokens) {
                if (set.contains(s)) {
                    Integer a = stack.pop();
                    Integer b = stack.pop();
                    int res;
                    if (s.equals("+")) {
                        res = b + a;
                    } else if (s.equals("-")) {
                        res = b - a;
                    } else if (s.equals("*")) {
                        res = b * a;
                    } else {
                        res = b / a;
                    }
                    stack.push(res);
                } else {
                    stack.push(Integer.valueOf(s));
                }
            }
            return stack.pop();
        }
    }
}
